<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>String 字符串</title>
<link media="all" rel="stylesheet" type="text/css" href="styles/03e73060321a0a848018724a6c83de7f-theme-base.css" />
<link media="all" rel="stylesheet" type="text/css" href="styles/03e73060321a0a848018724a6c83de7f-theme-medium.css" />

 </head>
 <body class="docs"><div class="navbar navbar-fixed-top">
  <div class="navbar-inner clearfix">
    <ul class="nav" style="width: 100%">
      <li style="float: left;"><a href="language.types.float.html">« Float 浮点型</a></li>
      <li style="float: right;"><a href="language.types.numeric-strings.html">数字字符串 »</a></li>
    </ul>
  </div>
</div>
<div id="breadcrumbs" class="clearfix">
  <ul class="breadcrumbs-container">
    <li><a href="index.html">PHP Manual</a></li>
    <li><a href="language.types.html">类型</a></li>
    <li>String 字符串</li>
  </ul>
</div>
<div id="layout">
  <div id="layout-content"><div id="language.types.string" class="sect1">
 <h2 class="title">String 字符串</h2>

 <p class="para">
  一个字符串 <span class="type">string</span> 就是由一系列的字符组成，其中每个字符等同于一个字节。这意味着
  PHP 只能支持 256 的字符集，因此不支持 Unicode 。详见<a href="language.types.string.html#language.types.string.details" class="link">字符串类型详解</a>。
 </p>

 <blockquote class="note"><p><strong class="note">注意</strong>: 
  <span class="simpara">
   在 32 位版本中，<span class="type">string</span> 最大可以达到 2GB（最多 2147483647 字节）。
  </span>
 </p></blockquote>

 <div class="sect2" id="language.types.string.syntax">
  <h3 class="title">语法</h3>

  <p class="para">
   一个字符串可以用 4 种方式表达：
  </p>

  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.html#language.types.string.syntax.single" class="link">单引号</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.html#language.types.string.syntax.double" class="link">双引号</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.html#language.types.string.syntax.heredoc" class="link">heredoc 语法结构</a>
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <a href="language.types.string.html#language.types.string.syntax.nowdoc" class="link">nowdoc 语法结构</a>
    </span>
   </li>
  </ul>

  <div class="sect3" id="language.types.string.syntax.single">
   <h4 class="title">单引号</h4>

   <p class="para">
    定义一个字符串的最简单的方法是用单引号把它包围起来（字符 <code class="literal">&#039;</code>）。
   </p>

   <p class="para">
    要表达一个单引号自身，需在它的前面加个反斜线（<code class="literal">\</code>）来转义。要表达一个反斜线自身，则用两个反斜线（<code class="literal">\\</code>）。其它任何方式的反斜线都会被当成反斜线本身：也就是说如果想使用其它转义序列例如
    <code class="literal">\r</code> 或者 <code class="literal">\n</code>，并不代表任何特殊含义，就单纯是这两个字符本身。
   </p>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <span class="simpara">
     不像<a href="language.types.string.html#language.types.string.syntax.double" class="link">双引号</a>和
     <a href="language.types.string.html#language.types.string.syntax.heredoc" class="link">heredoc</a>
     语法结构，在单引号字符串中的<a href="language.variables.html" class="link">变量</a>和特殊字符的转义序列将<em class="emphasis">不会</em>被替换。
    </span>
   </p></blockquote>

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'this&nbsp;is&nbsp;a&nbsp;simple&nbsp;string'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;可以录入多行<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'You&nbsp;can&nbsp;also&nbsp;have&nbsp;embedded&nbsp;newlines&nbsp;in<br />strings&nbsp;this&nbsp;way&nbsp;as&nbsp;it&nbsp;is<br />okay&nbsp;to&nbsp;do'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;输出：&nbsp;Arnold&nbsp;once&nbsp;said:&nbsp;"I'll&nbsp;be&nbsp;back"<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'Arnold&nbsp;once&nbsp;said:&nbsp;"I\'ll&nbsp;be&nbsp;back"'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;输出：&nbsp;You&nbsp;deleted&nbsp;C:\*.*?<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'You&nbsp;deleted&nbsp;C:\\*.*?'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;输出：&nbsp;You&nbsp;deleted&nbsp;C:\*.*?<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'You&nbsp;deleted&nbsp;C:\*.*?'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;输出：&nbsp;This&nbsp;will&nbsp;not&nbsp;expand:&nbsp;\n&nbsp;a&nbsp;newline<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'This&nbsp;will&nbsp;not&nbsp;expand:&nbsp;\n&nbsp;a&nbsp;newline'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;输出：&nbsp;Variables&nbsp;do&nbsp;not&nbsp;$expand&nbsp;$either<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'Variables&nbsp;do&nbsp;not&nbsp;$expand&nbsp;$either'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>

   </div>

  </div>

  <div class="sect3" id="language.types.string.syntax.double">
   <h4 class="title">双引号</h4>

   <p class="para">
    如果字符串是包围在双引号（&quot;）中， PHP 将对以下特殊的字符进行解析：
   </p>

   <table class="doctable table">
    <caption><strong>转义字符</strong></caption>

    
     <thead>
      <tr>
       <th>序列</th>
       <th>含义</th>
      </tr>

     </thead>


     <tbody class="tbody">
      <tr>
       <td><code class="literal">\n</code></td>
       <td>换行（ASCII 字符集中的 LF 或 0x0A (10)）</td>
      </tr>

      <tr>
       <td><code class="literal">\r</code></td>
       <td>回车（ASCII 字符集中的 CR 或 0x0D (13)）</td>
      </tr>

      <tr>
       <td><code class="literal">\t</code></td>
       <td>水平制表符（ASCII 字符集中的 HT 或 0x09 (9)）</td>
      </tr>

      <tr>
       <td><code class="literal">\v</code></td>
       <td>垂直制表符（ASCII 字符集中的 VT 或 0x0B (11)）</td>
      </tr>

      <tr>
       <td><code class="literal">\e</code></td>
       <td>Escape（ASCII 字符集中的 ESC 或 0x1B (27)）</td>
      </tr>

      <tr>
       <td><code class="literal">\f</code></td>
       <td>换页（ASCII 字符集中的 FF 或 0x0C (12)）</td>
      </tr>

      <tr>
       <td><code class="literal">\\</code></td>
       <td>反斜线</td>
      </tr>

      <tr>
       <td><code class="literal">\$</code></td>
       <td>美元标记</td>
      </tr>

      <tr>
       <td><code class="literal">\&quot;</code></td>
       <td>双引号</td>
      </tr>

      <tr>
       <td><code class="literal">\[0-7]{1,3}</code></td>
       <td>
        符合该正则表达式序列的是一个以八进制方式来表达的字符，which silently overflows to fit in a byte
        (e.g. &quot;\400&quot; === &quot;\000&quot;)
       </td>
      </tr>

      <tr>
       <td><code class="literal">\x[0-9A-Fa-f]{1,2}</code></td>
       <td>
        符合该正则表达式序列的是一个以十六进制方式来表达的字符
       </td>
      </tr>

      <tr>
       <td><code class="literal">\u{[0-9A-Fa-f]+}</code></td>
       <td>
        匹配正则表达式的字符序列是 unicode 码位，
        该码位能作为 UTF-8 的表达方式输出字符串
       </td>
      </tr>

     </tbody>
    
   </table>


   <p class="para">
    和单引号字符串一样，转义任何其它字符都会导致反斜线被显示出来。
   </p>

   <p class="para">
    用双引号定义的字符串最重要的特征是变量会被解析，详见<a href="language.types.string.html#language.types.string.parsing" class="link">变量解析</a>。
   </p>
  </div>
  
  <div class="sect3" id="language.types.string.syntax.heredoc">
   <h4 class="title">Heredoc 结构</h4>

   <p class="simpara">
    第三种表达字符串的方法是用 heredoc
    句法结构：<code class="literal">&lt;&lt;&lt;</code>。在该运算符之后要提供一个标识符，然后换行。接下来是字符串
    <span class="type">string</span> 本身，最后要用前面定义的标识符作为结束标志。
   </p>

   <p class="simpara">
    结束标识符可以使用空格或制表符（tab）缩进，此时文档字符串会删除所有缩进。
    在 PHP 7.3.0 之前的版本中，结束时所引用的标识符<em class="emphasis">必须</em>在该行的第一列。
    </p>
    <p class="simpara">
    而且，标识符的命名也要像其它标签一样遵守
    PHP 的规则：只能包含字母、数字和下划线，并且必须以字母和下划线作为开头。
   </p>

   <div class="example" id="example-36">
    <p><strong>示例 #1 PHP 7.3.0 之后的基础 Heredoc 示例</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;无缩进<br /></span><span style="color: #007700">echo&nbsp;&lt;&lt;&lt;END<br /></span><span style="color: #DD0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b<br />&nbsp;&nbsp;&nbsp;&nbsp;c<br />\n<br /></span><span style="color: #007700">END;<br /></span><span style="color: #FF8000">//&nbsp;4&nbsp;空格缩进<br /></span><span style="color: #007700">echo&nbsp;&lt;&lt;&lt;END<br /></span><span style="color: #DD0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b<br />&nbsp;&nbsp;&nbsp;&nbsp;c<br /></span><span style="color: #007700">&nbsp;&nbsp;&nbsp;&nbsp;END;</span>
</span>
</code></div>
    </div>

    <div class="example-contents"><p>以上例程在 PHP 7.3 中的输出：</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
      a
     b
    c
  a
 b
c
</pre></div>
    </div>
   </div>

   <p class="simpara">
    如果结束标识符的缩进超过内容的任何一行的缩进，则将抛出 <span class="classname"><a href="class.parseerror.html" class="classname">ParseError</a></span> 异常：
   </p>

   <div class="example" id="example-37">
    <p><strong>示例 #2 结束标识符的缩进不能超过正文的任何一行</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo&nbsp;&lt;&lt;&lt;END<br /></span><span style="color: #DD0000">&nbsp;&nbsp;a<br />&nbsp;b<br />c<br /></span><span style="color: #007700">&nbsp;&nbsp;&nbsp;END;</span>
</span>
</code></div>
    </div>

    <div class="example-contents"><p>以上例程在 PHP 7.3 中的输出：</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
PHP Parse error:  Invalid body indentation level (expecting an indentation level of at least 3) in example.php on line 4
</pre></div>
    </div>
   </div>

   <p class="simpara">
    制表符也可以缩进结束标识符，但是，关于缩进结束标识符和内容，
    制表符和空格<em class="emphasis">不能</em>混合使用。在以上任何情况下，
    将会抛出 <span class="classname"><a href="class.parseerror.html" class="classname">ParseError</a></span> 异常。

    之所以包含这些空白限制，是因为混合制表符和空格来缩进不利于易读性。
   </p>

   <div class="example" id="example-38">
    <p><strong>示例 #3 内容（空白）和结束标识符的不同缩进</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;以下所有代码都不起作用。<br />//&nbsp;正文（空格）和结束标记（制表符），不同的缩进<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&lt;&lt;&lt;END<br /></span><span style="color: #DD0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a<br /></span><span style="color: #007700">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END;<br />}<br /></span><span style="color: #FF8000">//&nbsp;在正文中混合空格和制表符<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&lt;&lt;&lt;END<br /></span><span style="color: #DD0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a<br /></span><span style="color: #007700">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END;<br />}<br /></span><span style="color: #FF8000">//&nbsp;在结束标记中混合空格和制表符<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&lt;&lt;&lt;END<br /></span><span style="color: #DD0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a<br /></span><span style="color: #007700">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END;<br />}</span>
</span>
</code></div>
    </div>

    <div class="example-contents"><p>以上例程在 PHP 7.3 中的输出：</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
PHP Parse error:  Invalid indentation - tabs and spaces cannot be mixed in example.php line 8
</pre></div>
    </div>
   </div>

   <p class="simpara">
    内容字符串的结束标识符后面不需要跟分号或者换行符。
    例如，从 PHP 7.3.0 开始允许以下代码：
   </p>

   <div class="example" id="example-39">
    <p><strong>示例 #4 在结束标识符后继续表达式</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$values&nbsp;</span><span style="color: #007700">=&nbsp;[&lt;&lt;&lt;END<br /></span><span style="color: #DD0000">a<br />&nbsp;&nbsp;b<br />&nbsp;&nbsp;&nbsp;&nbsp;c<br /></span><span style="color: #007700">END,&nbsp;</span><span style="color: #DD0000">'d&nbsp;e&nbsp;f'</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$values</span><span style="color: #007700">);</span>
</span>
</code></div>
    </div>

    <div class="example-contents"><p>以上例程在 PHP 7.3 中的输出：</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
array(2) {
  [0] =&gt;
  string(11) &quot;a
  b
    c&quot;
  [1] =&gt;
  string(5) &quot;d e f&quot;
}
</pre></div>
    </div>
   </div>

   <div class="warning"><strong class="warning">警告</strong>
    <p class="simpara">
     如果在某一行的开头找到了结束标识符，那么不管它是否是另外一个单词的一部分，
     它都可能看作结束标识符并引起 <span class="classname"><a href="class.parseerror.html" class="classname">ParseError</a></span>。
    </p>

    <div class="example" id="example-40">
     <p><strong>示例 #5 字符串内容中的结束标识符往往会导致 ParseError</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$values&nbsp;</span><span style="color: #007700">=&nbsp;[&lt;&lt;&lt;END<br /></span><span style="color: #DD0000">a<br />b<br /></span><span style="color: #007700">END&nbsp;</span><span style="color: #0000BB">ING<br />END</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'d&nbsp;e&nbsp;f'</span><span style="color: #007700">];</span>
</span>
</code></div>
     </div>

     <div class="example-contents"><p>以上例程在 PHP 7.3 中的输出：</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
PHP Parse error:  syntax error, unexpected identifier &quot;ING&quot;, expecting &quot;]&quot; in example.php on line 6
</pre></div>
     </div>
    </div>

    <p class="simpara">
     为了避免这个问题，遵循以下简单的规则较为安全：
     <em class="emphasis">不要选择正文内容中出现的词作为结束标识符</em>。
    </p>

   </div>
   
   <div class="warning"><strong class="warning">警告</strong>
    <p class="simpara">
     在 PHP 7.3.0 之前，请务必注意，带有结束标识符的行不能包含除
     (<code class="literal">;</code>)外的任何其他字符。
     这意味着标识符<em class="emphasis">不能缩进</em>，分号的前后也不能有任何空白或制表符。更重要的是结束标识符的前面必须是个被本地操作系统认可的换行，比如在
     UNIX 和 macOS 系统中是 <code class="literal">\n</code>，而结束定界符之后也必须紧跟一个换行。
    </p>

    <p class="simpara">
     如果不遵守该规则导致结束标识不“干净”，PHP
     将认为它不是结束标识符而继续寻找。如果在文件结束前也没有找到一个正确的结束标识符，PHP
     将会在最后一行产生一个解析错误。
    </p>

    <div class="example" id="example-41">
     <p><strong>示例 #6 PHP 7.3.0 之前的错误示例</strong></p>
     <div class="example-contents">
      
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">foo&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000BB">$bar&nbsp;</span><span style="color: #007700">=&nbsp;&lt;&lt;&lt;EOT<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">&nbsp;&nbsp;&nbsp;&nbsp;EOT;<br />}<br /></span><span style="color: #FF8000">//&nbsp;不能缩进标识符<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
     </div>

    </div>
    <div class="example" id="example-42">
     <p><strong>示例 #7 即使在 PHP 7.3.0 之前也合法的示例</strong></p>
     <div class="example-contents">
      
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">foo&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000BB">$bar&nbsp;</span><span style="color: #007700">=&nbsp;&lt;&lt;&lt;EOT<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">EOT;<br />}<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
     </div>

    </div>

    <p class="para">
     Heredocs 结构不能用来初始化类的属性。
    </p>
   </div>

   <p class="para">
    Heredoc 结构就象是没有双引号的 <span class="type">string</span>，这就是说在 heredoc
    结构中单引号不用被转义，但是上文中列出的转义序列还可以使用。变量将被替换，但在 heredoc
    结构中含有复杂的变量时要像 <span class="type">string</span> 一样格外小心。
   </p>

   <div class="example" id="example-43"> 
    <p><strong>示例 #8 Heredoc 结构的字符串示例</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$str&nbsp;</span><span style="color: #007700">=&nbsp;&lt;&lt;&lt;EOD<br /></span><span style="color: #DD0000">Example&nbsp;of&nbsp;string<br />spanning&nbsp;multiple&nbsp;lines<br />using&nbsp;heredoc&nbsp;syntax.<br /></span><span style="color: #007700">EOD;<br /><br /></span><span style="color: #FF8000">/*&nbsp;含有变量的更复杂示例&nbsp;*/<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span style="color: #0000BB">$foo</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span style="color: #0000BB">$bar</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'Foo'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bar&nbsp;</span><span style="color: #007700">=&nbsp;array(</span><span style="color: #DD0000">'Bar1'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'Bar2'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'Bar3'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /></span><span style="color: #0000BB">$foo&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$name&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'MyName'</span><span style="color: #007700">;<br /><br />echo&nbsp;&lt;&lt;&lt;EOT<br /></span><span style="color: #DD0000">My&nbsp;name&nbsp;is&nbsp;"</span><span style="color: #0000BB">$name</span><span style="color: #DD0000">".&nbsp;I&nbsp;am&nbsp;printing&nbsp;some&nbsp;</span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo</span><span style="color: #DD0000">.<br />Now,&nbsp;I&nbsp;am&nbsp;printing&nbsp;some&nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bar</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]}</span><span style="color: #DD0000">.<br />This&nbsp;should&nbsp;print&nbsp;a&nbsp;capital&nbsp;'A':&nbsp;\x41<br /></span><span style="color: #007700">EOT;<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>

   </div>
   <p class="para">以上例程会输出：</p>
   <div class="example-contents screen">
<div class="cdata"><pre>
My name is &quot;MyName&quot;. I am printing some Foo.
Now, I am printing some Bar2.
This should print a capital &#039;A&#039;: A</pre></div>
   </div>

   <p class="para">
    也可以把 Heredoc 结构用在函数参数中来传递数据：
   </p>

   <div class="example" id="example-44">
    <p><strong>示例 #9 Heredoc 结构在参数中的示例</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />var_dump</span><span style="color: #007700">(array(&lt;&lt;&lt;EOD<br /></span><span style="color: #DD0000">foobar!<br /></span><span style="color: #007700">EOD<br />));<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>

   </div>

   <p class="para">
    可以用 Heredoc 结构来初始化静态变量和类的属性和常量：
   </p>

   <div class="example" id="example-45">
    <p><strong>示例 #10 使用 Heredoc 结构来初始化静态值</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;静态变量<br /></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">foo</span><span style="color: #007700">()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;</span><span style="color: #0000BB">$bar&nbsp;</span><span style="color: #007700">=&nbsp;&lt;&lt;&lt;LABEL<br /></span><span style="color: #DD0000">Nothing&nbsp;in&nbsp;here...<br /></span><span style="color: #007700">LABEL;<br />}<br /><br /></span><span style="color: #FF8000">//&nbsp;类的常量、属性<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;</span><span style="color: #0000BB">BAR&nbsp;</span><span style="color: #007700">=&nbsp;&lt;&lt;&lt;FOOBAR<br /></span><span style="color: #DD0000">Constant&nbsp;example<br /></span><span style="color: #007700">FOOBAR;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000BB">$baz&nbsp;</span><span style="color: #007700">=&nbsp;&lt;&lt;&lt;FOOBAR<br /></span><span style="color: #DD0000">Property&nbsp;example<br /></span><span style="color: #007700">FOOBAR;<br />}<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>

   </div>

   <p class="para">
    还可以在 Heredoc 结构中用双引号来声明标识符：
   </p>

   <div class="example" id="example-46">
    <p><strong>示例 #11 在 heredoc 结构中使用双引号</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo&nbsp;&lt;&lt;&lt;"FOOBAR"<br /></span><span style="color: #DD0000">Hello&nbsp;World!<br /></span><span style="color: #007700">FOOBAR;<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>

   </div>

  </div>

  <div class="sect3" id="language.types.string.syntax.nowdoc">
   <h4 class="title">Nowdoc 结构</h4>

   <p class="para">
    就象 heredoc 结构类似于双引号字符串，Nowdoc 结构是类似于单引号字符串的。Nowdoc
    结构很象 heredoc 结构，但是 nowdoc
    中<em class="emphasis">不进行解析操作</em>。这种结构很适合用于嵌入 PHP
    代码或其它大段文本而无需对其中的特殊字符进行转义。与 SGML 的
    <code class="literal">&lt;![CDATA[ ]]&gt;</code> 结构是用来声明大段的不用解析的文本类似，nowdoc 结构也有相同的特征。
   </p>

   <p class="para">
    一个 nowdoc 结构也用和 heredocs 结构一样的标记
    <code class="literal">&lt;&lt;&lt;</code>， 但是跟在后面的标识符要用单引号括起来，即
    <code class="literal">&lt;&lt;&lt;&#039;EOT&#039;</code>。Heredoc 结构的所有规则也同样适用于 nowdoc
    结构，尤其是结束标识符的规则。
   </p>

   <div class="example" id="example-47">
    <p><strong>示例 #12 Nowdoc 结构字符串示例</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo&nbsp;&lt;&lt;&lt;'EOD'<br /></span><span style="color: #DD0000">Example&nbsp;of&nbsp;string&nbsp;spanning&nbsp;multiple&nbsp;lines<br />using&nbsp;nowdoc&nbsp;syntax.&nbsp;Backslashes&nbsp;are&nbsp;always&nbsp;treated&nbsp;literally,<br />e.g.&nbsp;\\&nbsp;and&nbsp;\'.<br /></span><span style="color: #007700">EOD;</span>
</span>
</code></div>
    </div>

    <div class="example-contents"><p>以上例程会输出：</p></div>
    <div class="example-contents screen">
     <div class="cdata"><pre>
Example of string spanning multiple lines
using nowdoc syntax. Backslashes are always treated literally,
e.g. \\ and \&#039;.
</pre></div>
    </div>
   </div>

   <div class="example" id="example-48">
    <p><strong>示例 #13 含变量引用的 Nowdoc 字符串示例</strong></p>
    <div class="example-contents">
     <div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #FF8000">/*&nbsp;含有变量的更复杂的示例&nbsp;*/<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">foo<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000BB">$foo</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000BB">$bar</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'Foo'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bar&nbsp;</span><span style="color: #007700">=&nbsp;array(</span><span style="color: #DD0000">'Bar1'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'Bar2'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'Bar3'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /></span><span style="color: #0000BB">$foo&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$name&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'MyName'</span><span style="color: #007700">;<br /><br />echo&nbsp;&lt;&lt;&lt;'EOT'<br /></span><span style="color: #DD0000">My&nbsp;name&nbsp;is&nbsp;"$name".&nbsp;I&nbsp;am&nbsp;printing&nbsp;some&nbsp;$foo-&gt;foo.<br />Now,&nbsp;I&nbsp;am&nbsp;printing&nbsp;some&nbsp;{$foo-&gt;bar[1]}.<br />This&nbsp;should&nbsp;not&nbsp;print&nbsp;a&nbsp;capital&nbsp;'A':&nbsp;\x41<br /></span><span style="color: #007700">EOT;<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>

    <div class="example-contents"><p>以上例程会输出：</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
My name is &quot;$name&quot;. I am printing some $foo-&gt;foo.
Now, I am printing some {$foo-&gt;bar[1]}.
This should not print a capital &#039;A&#039;: \x41</pre></div>
   </div>
 </div>

    <div class="example" id="example-49">
     <p><strong>示例 #14 静态数据的示例</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">foo&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000BB">$bar&nbsp;</span><span style="color: #007700">=&nbsp;&lt;&lt;&lt;'EOT'<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">EOT;<br />}<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
     </div>

    </div>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
     Nowdoc 结构是在 PHP 5.3.0 中加入的。
    </p>
   </p></blockquote>

  </div>

  <div class="sect3" id="language.types.string.parsing">
   <h4 class="title">变量解析</h4>

   <p class="simpara">
    当<span class="type"><span class="type 字符串">字符串</span></span>用双引号或 heredoc 结构定义时，其中的<a href="language.variables.html" class="link">变量</a>将会被解析。
   </p>

   <p class="simpara">
    这里共有两种语法规则：一种<a href="language.types.string.html#language.types.string.parsing.simple" class="link">简单</a>规则，一种<a href="language.types.string.html#language.types.string.parsing.complex" class="link">复杂</a>规则。简单的语法规则是最常用和最方便的，它可以用最少的代码在一个
    <span class="type">string</span> 中嵌入一个变量，一个 <span class="type">array</span> 的值，或一个 <span class="type">object</span> 的属性。
   </p>

   <p class="simpara">
    复杂规则语法的显著标记是用花括号包围的表达式。
   </p>

   <div class="sect4" id="language.types.string.parsing.simple">
    <h5 class="title">简单语法</h5>

    <p class="simpara">
     当 PHP 解析器遇到一个美元符号（<code class="literal">$</code>）时，它会和其它很多解析器一样，去组合尽量多的标识以形成一个合法的变量名。可以用花括号来明确变量名的界线。
    </p>

    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$juice&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"apple"</span><span style="color: #007700">;<br /><br />echo&nbsp;</span><span style="color: #DD0000">"He&nbsp;drank&nbsp;some&nbsp;</span><span style="color: #0000BB">$juice</span><span style="color: #DD0000">&nbsp;juice."</span><span style="color: #007700">.</span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">//&nbsp;Invalid.&nbsp;"s"&nbsp;is&nbsp;a&nbsp;valid&nbsp;character&nbsp;for&nbsp;a&nbsp;variable&nbsp;name,&nbsp;but&nbsp;the&nbsp;variable&nbsp;is&nbsp;$juice.<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"He&nbsp;drank&nbsp;some&nbsp;juice&nbsp;made&nbsp;of&nbsp;</span><span style="color: #0000BB">$juices</span><span style="color: #DD0000">."</span><span style="color: #007700">;<br /></span><span style="color: #FF8000">//&nbsp;Valid.&nbsp;Explicitly&nbsp;specify&nbsp;the&nbsp;end&nbsp;of&nbsp;the&nbsp;variable&nbsp;name&nbsp;by&nbsp;enclosing&nbsp;it&nbsp;in&nbsp;braces:<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"He&nbsp;drank&nbsp;some&nbsp;juice&nbsp;made&nbsp;of&nbsp;</span><span style="color: #007700">${</span><span style="color: #0000BB">juice</span><span style="color: #007700">}</span><span style="color: #DD0000">s."</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
     </div>

     <p class="para">以上例程会输出：</p>
     <div class="example-contents screen">
<div class="cdata"><pre>
He drank some apple juice.
He drank some juice made of .
He drank some juice made of apples.
</pre></div>
     </div>
    </div>

    <p class="simpara">
     类似的，一个 <span class="type">array</span> 索引或一个 <span class="type">object</span>
     属性也可被解析。数组索引要用方括号（<code class="literal">]</code>）来表示索引结束的边际，对象属性则是和上述的变量规则相同。
    </p>

    <div class="example" id="example-50">
     <p><strong>示例 #15 简单语法示例</strong></p>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$juices&nbsp;</span><span style="color: #007700">=&nbsp;array(</span><span style="color: #DD0000">"apple"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"orange"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"koolaid1"&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">"purple"</span><span style="color: #007700">);<br /><br />echo&nbsp;</span><span style="color: #DD0000">"He&nbsp;drank&nbsp;some&nbsp;</span><span style="color: #0000BB">$juices</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]</span><span style="color: #DD0000">&nbsp;juice."</span><span style="color: #007700">.</span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">"He&nbsp;drank&nbsp;some&nbsp;</span><span style="color: #0000BB">$juices</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]</span><span style="color: #DD0000">&nbsp;juice."</span><span style="color: #007700">.</span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">"He&nbsp;drank&nbsp;some&nbsp;</span><span style="color: #0000BB">$juices</span><span style="color: #007700">[</span><span style="color: #0000BB">koolaid1</span><span style="color: #007700">]</span><span style="color: #DD0000">&nbsp;juice."</span><span style="color: #007700">.</span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />class&nbsp;</span><span style="color: #0000BB">people&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000BB">$john&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"John&nbsp;Smith"</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000BB">$jane&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"Jane&nbsp;Smith"</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000BB">$robert&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"Robert&nbsp;Paulsen"</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000BB">$smith&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"Smith"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$people&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">people</span><span style="color: #007700">();<br /><br />echo&nbsp;</span><span style="color: #DD0000">"</span><span style="color: #0000BB">$people</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">john</span><span style="color: #DD0000">&nbsp;drank&nbsp;some&nbsp;</span><span style="color: #0000BB">$juices</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]</span><span style="color: #DD0000">&nbsp;juice."</span><span style="color: #007700">.</span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">"</span><span style="color: #0000BB">$people</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">john</span><span style="color: #DD0000">&nbsp;then&nbsp;said&nbsp;hello&nbsp;to&nbsp;</span><span style="color: #0000BB">$people</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">jane</span><span style="color: #DD0000">."</span><span style="color: #007700">.</span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">"</span><span style="color: #0000BB">$people</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">john</span><span style="color: #DD0000">'s&nbsp;wife&nbsp;greeted&nbsp;</span><span style="color: #0000BB">$people</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">robert</span><span style="color: #DD0000">."</span><span style="color: #007700">.</span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">"</span><span style="color: #0000BB">$people</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">robert</span><span style="color: #DD0000">&nbsp;greeted&nbsp;the&nbsp;two&nbsp;</span><span style="color: #0000BB">$people</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">smiths</span><span style="color: #DD0000">."</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;Won't&nbsp;work<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
     </div>

     <div class="example-contents"><p>以上例程会输出：</p></div>
     <div class="example-contents screen">
<div class="cdata"><pre>
He drank some apple juice.
He drank some orange juice.
He drank some purple juice.
John Smith drank some apple juice.
John Smith then said hello to Jane Smith.
John Smith&#039;s wife greeted Robert Paulsen.
Robert Paulsen greeted the two .
</pre></div>
     </div>
    </div>

    <p class="simpara">
     从 PHP 7.1.0 起，还支持<em class="emphasis">负</em>数字索引。
    </p>

    <div class="example" id="example-51"><p><strong>示例 #16 负数索引</strong></p>
     <div class="example-contents">
      <div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$string&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'string'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">"The&nbsp;character&nbsp;at&nbsp;index&nbsp;-2&nbsp;is&nbsp;</span><span style="color: #0000BB">$string</span><span style="color: #007700">[-</span><span style="color: #0000BB">2</span><span style="color: #007700">]</span><span style="color: #DD0000">."</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$string</span><span style="color: #007700">[-</span><span style="color: #0000BB">3</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'o'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">"Changing&nbsp;the&nbsp;character&nbsp;at&nbsp;index&nbsp;-3&nbsp;to&nbsp;o&nbsp;gives&nbsp;</span><span style="color: #0000BB">$string</span><span style="color: #DD0000">."</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
     </div>

     <div class="example-contents"><p>以上例程会输出：</p></div>
     <div class="example-contents screen">
      <div class="cdata"><pre>
The character at index -2 is n.
Changing the character at index -3 to o gives strong.
</pre></div>
     </div>
    </div>

    <p class="simpara">
     如果想要表达更复杂的结构，请用复杂语法。
    </p>
   </div>

   <div class="sect4" id="language.types.string.parsing.complex">
    <h5 class="title">复杂（花括号）语法</h5>

    <p class="simpara">
     复杂语法不是因为其语法复杂而得名，而是因为它可以使用复杂的表达式。
    </p>

    <p class="simpara">
     任何具有 <span class="type">string</span>
     表达的标量变量，数组单元或对象属性都可使用此语法。
     表达式的书写方式与在 <span class="type">string</span> 以外的方式相同，
     然后用花括号 <code class="literal">{</code> 和 <code class="literal">}</code> 把它括起来即可。由于
     <code class="literal">{</code> 无法被转义，只有 <code class="literal">$</code>
     紧挨着 <code class="literal">{</code> 时才会被识别。可以用
     <code class="literal">{\$</code> 来表达 <code class="literal">{$</code>。下面的示例可以更好的解释：
    </p>

    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;显示所有错误<br /></span><span style="color: #0000BB">error_reporting</span><span style="color: #007700">(</span><span style="color: #0000BB">E_ALL</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$great&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'fantastic'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;无效，输出: This is { fantastic}<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"This&nbsp;is&nbsp;{&nbsp;</span><span style="color: #0000BB">$great</span><span style="color: #DD0000">}"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;有效，输出：&nbsp;This&nbsp;is&nbsp;fantastic<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"This&nbsp;is&nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB">$great</span><span style="color: #007700">}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;有效<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"This&nbsp;square&nbsp;is&nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB">$square</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">width</span><span style="color: #007700">}</span><span style="color: #DD0000">00&nbsp;centimeters&nbsp;broad."</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;有效，只有通过花括号语法才能正确解析带引号的键名<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"This&nbsp;works:&nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'key'</span><span style="color: #007700">]}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;有效<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"This&nbsp;works:&nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">4</span><span style="color: #007700">][</span><span style="color: #0000BB">3</span><span style="color: #007700">]}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;这是错误的表达式，因为就象&nbsp;$foo[bar]&nbsp;的格式在字符串以外也是错的一样。<br />//&nbsp;换句话说，只有在&nbsp;PHP&nbsp;能找到常量&nbsp;foo&nbsp;的前提下才会正常工作；这里会产生一个<br />//&nbsp;E_NOTICE (undefined constant)&nbsp;级别的错误。<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"This&nbsp;is&nbsp;wrong:&nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #0000BB">foo</span><span style="color: #007700">][</span><span style="color: #0000BB">3</span><span style="color: #007700">]}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;有效，当在字符串中使用多重数组时，一定要用括号将它括起来<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"This&nbsp;works:&nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">][</span><span style="color: #0000BB">3</span><span style="color: #007700">]}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;有效<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"This&nbsp;works:&nbsp;"&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">$arr</span><span style="color: #007700">[</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">][</span><span style="color: #0000BB">3</span><span style="color: #007700">];<br /><br />echo&nbsp;</span><span style="color: #DD0000">"This&nbsp;works&nbsp;too:&nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">values</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">]-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br />echo&nbsp;</span><span style="color: #DD0000">"This&nbsp;is&nbsp;the&nbsp;value&nbsp;of&nbsp;the&nbsp;var&nbsp;named&nbsp;</span><span style="color: #0000BB">$name</span><span style="color: #DD0000">:&nbsp;</span><span style="color: #007700">{${</span><span style="color: #0000BB">$name</span><span style="color: #007700">}}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br />echo&nbsp;</span><span style="color: #DD0000">"This&nbsp;is&nbsp;the&nbsp;value&nbsp;of&nbsp;the&nbsp;var&nbsp;named&nbsp;by&nbsp;the&nbsp;return&nbsp;value&nbsp;of&nbsp;getName():&nbsp;</span><span style="color: #007700">{${</span><span style="color: #0000BB">getName</span><span style="color: #007700">()}}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br />echo&nbsp;</span><span style="color: #DD0000">"This&nbsp;is&nbsp;the&nbsp;value&nbsp;of&nbsp;the&nbsp;var&nbsp;named&nbsp;by&nbsp;the&nbsp;return&nbsp;value&nbsp;of&nbsp;\$object-&gt;getName():&nbsp;</span><span style="color: #007700">{${</span><span style="color: #0000BB">$object</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getName</span><span style="color: #007700">()}}</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;无效，输出：&nbsp;This&nbsp;is&nbsp;the&nbsp;return&nbsp;value&nbsp;of&nbsp;getName():&nbsp;{getName()}<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"This&nbsp;is&nbsp;the&nbsp;return&nbsp;value&nbsp;of&nbsp;getName():&nbsp;{getName()}"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;无效,&nbsp;输出：&nbsp;C:\folder\{fantastic}.txt<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"C:\folder\{</span><span style="color: #0000BB">$great</span><span style="color: #DD0000">}.txt"<br /></span><span style="color: #FF8000">//&nbsp;有效,&nbsp;输出：&nbsp;C:\folder\fantastic.txt<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"C:\\folder\\</span><span style="color: #007700">{</span><span style="color: #0000BB">$great</span><span style="color: #007700">}</span><span style="color: #DD0000">.txt"<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>

     </div>

    </div>

    <p class="para">
     也可以在字符串中用此语法通过变量来调用类的属性。
    </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">foo&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span style="color: #0000BB">$bar&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'I&nbsp;am&nbsp;bar.'</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$foo&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$bar&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$baz&nbsp;</span><span style="color: #007700">=&nbsp;array(</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'bar'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'baz'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'quux'</span><span style="color: #007700">);<br />echo&nbsp;</span><span style="color: #DD0000">"</span><span style="color: #007700">{</span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">$bar</span><span style="color: #007700">}</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">"</span><span style="color: #007700">{</span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;{</span><span style="color: #0000BB">$baz</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]}}</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>

   <p class="para">以上例程会输出：</p>
   <div class="example-contents screen"><br />
I am bar.<br />
I am bar.<br />
   </div>
   </div>

    <blockquote class="note"><p><strong class="note">注意</strong>: 
     <p class="para">
      函数、方法、静态类变量和类常量可使用 <code class="literal">{$}</code>
      ，在该字符串被定义的命名空间中将其值作为变量名来访问。只单一使用花括号
      (<code class="literal">{}</code>) 无法处理从函数或方法的返回值或者类常量以及类静态变量的值。
     </p>
    </p></blockquote>

    <div class="informalexample">
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;显示所有错误<br /></span><span style="color: #0000BB">error_reporting</span><span style="color: #007700">(</span><span style="color: #0000BB">E_ALL</span><span style="color: #007700">);<br /><br />class&nbsp;</span><span style="color: #0000BB">beers&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;</span><span style="color: #0000BB">softdrink&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'rootbeer'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;</span><span style="color: #0000BB">$ale&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'ipa'</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">$rootbeer&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'A&nbsp;&amp;&nbsp;W'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$ipa&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'Alexander&nbsp;Keith\'s'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;有效，输出：&nbsp;I'd&nbsp;like&nbsp;an&nbsp;A&nbsp;&amp;&nbsp;W<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"I'd&nbsp;like&nbsp;an&nbsp;</span><span style="color: #007700">{${</span><span style="color: #0000BB">beers</span><span style="color: #007700">::</span><span style="color: #0000BB">softdrink</span><span style="color: #007700">}}</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;也有效，输出：&nbsp;I'd&nbsp;like&nbsp;an&nbsp;Alexander&nbsp;Keith's<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"I'd&nbsp;like&nbsp;an&nbsp;</span><span style="color: #007700">{${</span><span style="color: #0000BB">beers</span><span style="color: #007700">::</span><span style="color: #0000BB">$ale</span><span style="color: #007700">}}</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
     </div>

    </div>

   </div>
  </div>
  
  <div class="sect3" id="language.types.string.substr">
   <h4 class="title">存取和修改字符串中的字符</h4>

   <p class="para">
    <span class="type">string</span> 中的字符可以通过一个从 0 开始的下标，用类似
    <span class="type">array</span> 结构中的方括号包含对应的数字来访问和修改，比如
    <var class="varname">$str[42]</var>。可以把 <span class="type">string</span>
    当成字符组成的 <span class="type">array</span>。函数 <span class="function"><a href="function.substr.html" class="function">substr()</a></span> 和
    <span class="function"><a href="function.substr-replace.html" class="function">substr_replace()</a></span> 可用于操作多于一个字符的情况。
   </p>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <span class="simpara">
     从 PHP 7.1.0 开始，还支持 string 负偏移量。从 string 尾部到指定位置的偏移量。
     以前，负偏移量读取时（返回空 string）会发出 <strong><code>E_NOTICE</code></strong>， 
     写入时（string 保持不变）会发出 <strong><code>E_WARNING</code></strong>。
    </span>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <span class="simpara">
     PHP 8.0.0 之前, 出于同样的目的，可以使用大括号访问 <span class="type">string</span>，例如 <var class="varname">$str{42}</var>。
     从 PHP 7.4.0 起，此大括号语法被弃用，自 PHP 8.0.0 开始不再受支持。
    </span>
   </p></blockquote>

   <div class="warning"><strong class="warning">警告</strong>
    <p class="simpara">
     用超出字符串长度的下标写入将会拉长该字符串并以空格填充。非整数类型下标会被转换成整数。非法下标类型会产生一个
     <strong><code>E_WARNING</code></strong> 级别错误。
     写入时只用到了赋值字符串的第一个字符。
     PHP 7.1.0 开始，用空字符串赋值会导致 fatal 错误；在之前赋给的值是
     NULL 字符。
    </p>
   </div>

   <div class="warning"><strong class="warning">警告</strong>
    <p class="simpara">
     PHP 的字符串在内部是字节组成的数组。因此用花括号访问或修改字符串对多字节字符集很不安全。仅应对单字节编码例如
     ISO-8859-1 的字符串进行此类操作。
    </p>
   </div>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <span class="simpara">
     从 PHP 7.1.0 开始，对空字符串应用空索引运算符会引发致命错误。
     以前是空字符串会被静默转为数组。
    </span>
   </p></blockquote>

   <div class="example" id="example-52">
    <p><strong>示例 #17 一些字符串示例</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;取得字符串的第一个字符<br /></span><span style="color: #0000BB">$str&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'This&nbsp;is&nbsp;a&nbsp;test.'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$first&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">];<br /><br /></span><span style="color: #FF8000">//&nbsp;取得字符串的第三个字符<br /></span><span style="color: #0000BB">$third&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">];<br /><br /></span><span style="color: #FF8000">//&nbsp;取得字符串的最后一个字符<br /></span><span style="color: #0000BB">$str&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'This&nbsp;is&nbsp;still&nbsp;a&nbsp;test.'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$last&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">)-</span><span style="color: #0000BB">1</span><span style="color: #007700">];<br /><br /></span><span style="color: #FF8000">//&nbsp;修改字符串的最后一个字符<br /></span><span style="color: #0000BB">$str&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'Look&nbsp;at&nbsp;the&nbsp;sea'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">)-</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'e'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>

   </div>

   <p class="para">
    字符串下标必须为整数或可转换为整数的字符串，否则会发出警告。之前类似
    <code class="literal">&quot;foo&quot;</code> 的下标会无声地转换成 <code class="literal">0</code>。
   </p>

   <div class="example" id="example-53">
    
    <p><strong>示例 #18 字符串无效下标的例子</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$str&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'abc'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #DD0000">'1'</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(isset(</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #DD0000">'1'</span><span style="color: #007700">]));<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #DD0000">'1.0'</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(isset(</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #DD0000">'1.0'</span><span style="color: #007700">]));<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #DD0000">'x'</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(isset(</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #DD0000">'x'</span><span style="color: #007700">]));<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #DD0000">'1x'</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(isset(</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #DD0000">'1x'</span><span style="color: #007700">]));<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>

    <div class="example-contents"><p>以上例程会输出：</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
string(1) &quot;b&quot;
bool(true)

Warning: Illegal string offset &#039;1.0&#039; in /tmp/t.php on line 7
string(1) &quot;b&quot;
bool(false)

Warning: Illegal string offset &#039;x&#039; in /tmp/t.php on line 9
string(1) &quot;a&quot;
bool(false)
string(1) &quot;b&quot;
bool(false)
</pre></div>
    </div>
   </div>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
     用 <code class="literal">[]</code> 或 <code class="literal">{}</code>
     访问任何其它类型（不包括数组或具有相应接口的对象实现）的变量只会无声地返回 <strong><code>null</code></strong>。
    </p>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
     可以直接在字符串原型中用
     <code class="literal">[]</code> 或 <code class="literal">{}</code> 访问字符。
    </p>
   </p></blockquote>

   <blockquote class="note"><p><strong class="note">注意</strong>: 
    <p class="para">
     PHP 7.4 中弃用在字符串字面量中使用 <code class="literal">{}</code> 来访问字符。
     PHP 8.0 已移除。
    </p>
   </p></blockquote>
  </div>
 </div>

 <div class="sect2" id="language.types.string.useful-funcs">
  <h3 class="title">有用的函数和运算符</h3>

  <p class="para">
   字符串可以用 &#039;.&#039;（点）运算符连接起来，注意
   &#039;+&#039;（加号）运算符<em class="emphasis">没有</em>这个功能。更多信息参考<a href="language.operators.string.html" class="link">字符串运算符</a>。
  </p>

  <p class="para">
   对于 <span class="type">string</span> 的操作有很多有用的函数。
  </p>

  <p class="simpara">
   可以参考<a href="ref.strings.html" class="link">字符串函数</a>了解大部分函数，高级的查找与替换功能可以参考
   <a href="ref.pcre.html" class="link">Perl 兼容正则表达式函数</a>。
  </p>

  <p class="simpara">
   另外还有 <a href="ref.url.html" class="link">URL
   字符串函数</a>，也有加密／解密字符串的函数（<a href="ref.sodium.html" class="link">Sodium</a> 和
   <a href="ref.hash.html" class="link">Hash</a>）。
  </p>

  <p class="simpara">
   最后，可以参考<a href="ref.ctype.html" class="link">字符类型函数</a>。
  </p>
 </div>

 <div class="sect2" id="language.types.string.casting">
  <h3 class="title">转换成字符串</h3>
  
  <p class="para">
   一个值可以通过在其前面加上 <code class="literal">(string)</code> 或用 <span class="function"><a href="function.strval.html" class="function">strval()</a></span>
   函数来转变成字符串。在一个需要字符串的表达式中，会自动转换为
   <span class="type">string</span>。比如在使用函数 <span class="function"><a href="function.echo.html" class="function">echo</a></span> 或 <span class="function"><a href="function.print.html" class="function">print</a></span>
   时，或在一个变量和一个 <span class="type">string</span> 进行比较时，就会发生这种转换。<a href="language.types.html" class="link">类型</a>和<a href="language.types.type-juggling.html" class="link">类型转换</a>可以更好的解释下面的事情，也可参考函数
   <span class="function"><a href="function.settype.html" class="function">settype()</a></span>。
  </p>
  
  <p class="para">
   一个布尔值 <span class="type">bool</span> 的 <strong><code>true</code></strong> 被转换成 <span class="type">string</span> 的
   <code class="literal">&quot;1&quot;</code>。<span class="type">bool</span> 的 <strong><code>false</code></strong> 被转换成
   <code class="literal">&quot;&quot;</code>（空字符串）。这种转换可以在 <span class="type">bool</span>
   和 <span class="type">string</span> 之间相互进行。
  </p>

  <p class="para"> 
   一个整数 <span class="type">int</span> 或浮点数 <span class="type">float</span> 被转换为数字的字面样式的
   <span class="type">string</span>（包括 <span class="type">float</span>
   中的指数部分）。使用指数计数法的浮点数（<code class="literal">4.1E+6</code>）也可转换。
  </p>

  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <p class="para">
    PHP 8.0.0 起，十进制小数点字符都是
    <code class="literal">.</code>。 而在此之前的版本，
    在脚本的区域（category LC_NUMERIC）中定义了十进制小数点字符。参见 <span class="function"><a href="function.setlocale.html" class="function">setlocale()</a></span>。
   </p>
  </p></blockquote>

  <p class="para">
   数组 <span class="type">array</span> 总是转换成字符串
   <code class="literal">&quot;Array&quot;</code>，因此，<span class="function"><a href="function.echo.html" class="function">echo</a></span> 和 
   <span class="function"><a href="function.print.html" class="function">print</a></span> 无法显示出该<span class="type"><span class="type 数组">数组</span></span>的内容。要显示某个单元，可以用 
   <code class="literal">echo $arr[&#039;foo&#039;]</code> 这种结构。要显示整个数组内容见下文。
  </p>

  <p class="para">
   必须使用魔术方法 <a href="language.oop5.magic.html" class="link">__toString</a>
   才能将 <span class="type">object</span> 转换为 <span class="type">string</span>。
  </p>

  <p class="para">
   资源 <span class="type">Resource</span> 总会被转变成 <code class="literal">&quot;Resource id #1&quot; </code>
   这种结构的字符串，其中的 <code class="literal">1</code> 是 PHP
   在运行时分配给该 <span class="type">resource</span> 的资源数字。
   While the exact structure of this string should not be relied on
   and is subject to change, it will always be unique for a given resource
   within the lifetime of a script being executed (ie a Web request or CLI
   process) and won&#039;t be reused.
   要得到一个
   <span class="type">resource</span> 的类型，可以用函数 <span class="function"><a href="function.get-resource-type.html" class="function">get_resource_type()</a></span>。
  </p>

  <p class="para">
   <strong><code>null</code></strong> 总是被转变成空字符串。
  </p>
  
  <p class="para">
   如上面所说的，直接把 <span class="type">array</span>，<span class="type">object</span> 或 <span class="type">resource</span>
   转换成 <span class="type">string</span> 不会得到除了其类型之外的任何有用信息。可以使用函数 
   <span class="function"><a href="function.print-r.html" class="function">print_r()</a></span> 和 <span class="function"><a href="function.var-dump.html" class="function">var_dump()</a></span> 列出这些类型的内容。
  </p>
  
  <p class="para">
   大部分的 PHP 值可以转变成 <span class="type">string</span> 来永久保存，这被称作串行化，可以用函数
   <span class="function"><a href="function.serialize.html" class="function">serialize()</a></span> 来实现。
  </p>

 </div>

 <div class="sect2" id="language.types.string.details">
  
  <h3 class="title">字符串类型详解</h3>
  
  <p class="para">
   PHP 中的 <span class="type">string</span>
   的实现方式是一个由字节组成的数组再加上一个整数指明缓冲区长度。并无如何将字节转换成字符的信息，由程序员来决定。字符串由什么值来组成并无限制；特别的，其值为
   <code class="literal">0</code>（“NUL bytes”）的字节可以处于字符串任何位置（不过有几个函数，在本手册中被称为非“二进制安全”的，也许会把
   NUL 字节之后的数据全都忽略）。
  </p>
  <p class="para">
   字符串类型的此特性解释了为什么 PHP 中没有单独的“byte”类型 -
   已经用字符串来代替了。返回非文本值的函数 - 例如从网络套接字读取的任意数据
   - 仍会返回字符串。
  </p>
  <p class="para">
   由于 PHP 并不特别指明字符串的编码，那字符串到底是怎样编码的呢？例如字符串
   <code class="literal">&quot;á&quot;</code> 到底是等于
   <code class="literal">&quot;\xE1&quot;</code>（ISO-8859-1），<code class="literal">&quot;\xC3\xA1&quot;</code>（UTF-8，C
   form），<code class="literal">&quot;\x61\xCC\x81&quot;</code>（UTF-8，D
   form）还是任何其它可能的表达呢？答案是字符串会被按照该脚本文件相同的编码方式来编码。因此如果一个脚本的编码是
   ISO-8859-1，则其中的字符串也会被编码为 ISO-8859-1，以此类推。不过这并不适用于激活了 Zend Multibyte
   时；此时脚本可以是以任何方式编码的（明确指定或被自动检测）然后被转换为某种内部编码，然后字符串将被用此方式编码。注意脚本的编码有一些约束（如果激活了 Zend Multibyte 则是其内部编码）-
   这意味着此编码应该是 ASCII 的兼容超集，例如
   UTF-8 或 ISO-8859-1。不过要注意，依赖状态的编码其中相同的字节值可以用于首字母和非首字母而转换状态，这可能会造成问题。
  </p>
  <p class="para">
   当然了，要做到有用，操作文本的函数必须假定字符串是如何编码的。不幸的是，PHP
   关于此的函数有很多变种：
  </p>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     某些函数假定字符串是以单字节编码的，但并不需要将字节解释为特定的字符。例如
     <span class="function"><a href="function.substr.html" class="function">substr()</a></span>，<span class="function"><a href="function.strpos.html" class="function">strpos()</a></span>，<span class="function"><a href="function.strlen.html" class="function">strlen()</a></span> 和
     <span class="function"><a href="function.strcmp.html" class="function">strcmp()</a></span>。理解这些函数的另一种方法是它们作用于内存缓冲区，即按照字节和字节下标操作。
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     某些函数被传递入了字符串的编码方式，也可能会假定默认无此信息。例如
     <span class="function"><a href="function.htmlentities.html" class="function">htmlentities()</a></span> 和
     <a href="book.mbstring.html" class="link">mbstring</a> 扩展中的大部分函数。
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     其它函数使用了当前区域（见 <span class="function"><a href="function.setlocale.html" class="function">setlocale()</a></span>），但是逐字节操作。
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     最后一些函数会假定字符串是使用某特定编码的，通常是
     UTF-8。<a href="book.intl.html" class="link">intl</a> 扩展和
     <a href="book.pcre.html" class="link">PCRE</a>（上例中仅在使用了
     <code class="literal">u</code> 修饰符时）扩展中的大部分函数都是这样。
    </span>
   </li>
  </ul>

  <p class="para">
   最后，要书写能够正确使用 Unicode 的程序依赖于很小心地避免那些可能会损坏数据的函数。要使用来自于
   <a href="book.intl.html" class="link">intl</a> 和 <a href="book.mbstring.html" class="link">mbstring</a>
   扩展的函数。不过使用能处理 Unicode 编码的函数只是个开始。不管用何种语言提供的函数，最基本的还是了解
   Unicode 规格。例如一个程序如果假定只有大写和小写，那可是大错特错。
  </p>
 </div>

</div></div></div></body></html>